<?php
include_once 'Connexion.class.php';


/*
 *  la classe CommandesDAO va servir de passerelle entre la base et le site, 
 *  elle va remplir des objets de type Commande et LigneCommande.
 *  Elle hérite de Connexion pour récupérer l'objet PDO. 
 */


class CommandesDAO extends Connexion {
    
    
    public function __Construct() {
        parent::__Construct();
    }
    


    public function ajouterCommande(Panier $panier, User $user){
        $verif = true;
        $produitDAO = new ProduitDAO();
        $reqComm  = "INSERT INTO commande(id, date, idUser, statut, validationSite) VALUES(NULL, NOW(), ".$user->getId().", 'en cours de validation', 0);";
        $this->_PDO->exec($reqComm);
            
        $idcomm = $this->getLastInsertId();
        $lesProduitsPanier = $panier->getLesProduitPanier();
        
        foreach ($lesProduitsPanier as $produitPan) {
            $idp = $produitPan->getProduitPanier()->getReference();
            $reqContenir = "INSERT INTO contenir(idCommande, idProduit, prix, quantite) VALUES(".$idcomm.", ".$idp.", ".$produitPan->getProduitPanier()->getPrix().", ".$produitPan->getQuantiteProduit()."  );";
            $retour = $this->_PDO->exec($reqContenir);
            $produitDAO->decrementerStock($idp, $produitPan->getQuantiteProduit());
            
            if($retour != 1)
                $verif = false;
        }
        
        return $verif;
        
    }
    
    public function getToutesLesCommandes(){
      
        $stmt = $this->_PDO->query("SELECT * from commande");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $commandes[] = $this->hydrateCommande($data);
            }
        }
        else
            $commandes = null;
        return $commandes;
      
    }
    
    
    public function getCommandesByIdUser($idUser){
        $commandes = array();
        $stmt = $this->_PDO->query("SELECT * from commande WHERE iduser  = $idUser ORDER BY date ASC ");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $commandes[] = $this->hydrateCommande($data);
            }
        }
        else
            $commandes = null;
        return $commandes;
      
    }
    
    public function getLigneCommandesByIdCommande($idComm){
        $lignesCommandes = array();
        $stmt = $this->_PDO->query("SELECT * from contenir WHERE idCommande  = $idComm ");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lignesCommandes[] = $this->hydrateLigneCommande($data);
            }
        }
        else
            $lignesCommandes = null;
        return $lignesCommandes;
      
    }
    
    
    
    
    
    
    public function hydrateCommande($data){
        $userDAO = new UserDAO();
        return new Commande($this->getLigneCommandesByIdCommande($data->id), $data->id, $data->date, $userDAO->getUserById($data->idUser) , $data->statut, $data->validationSite);
    }
    
    public function hydrateLigneCommande($data){
        $produitDAO = new ProduitDAO();
        return new LigneCommande($produitDAO->getProduitById($data->idProduit), $data->quantite, $data->prix);
    }
    
    
    
    
    
}

?>
